package br.com.sixsoftware.helpdesk.business;

import br.com.sixsoftware.helpdesk.domain.Cliente;
import br.com.sixsoftware.helpdesk.domain.Funcionario;
import br.com.sixsoftware.helpdesk.domain.Usuario;
import br.com.sixsoftware.helpdesk.exception.NegocioException;
import br.com.sixsoftware.helpdesk.persistence.UsuarioDAO;
import br.com.sixsoftware.helpdesk.util.BancoDadosSimulado;
import br.gov.frameworkdemoiselle.lifecycle.Startup;
import br.gov.frameworkdemoiselle.stereotype.BusinessController;
import br.gov.frameworkdemoiselle.template.DelegateCrud;

@BusinessController
public class UsuarioBC extends DelegateCrud<Usuario, Long, UsuarioDAO> {

	private static final long serialVersionUID = 1L;
	
	@Startup
	/**
	 * Método que efetua a carga inicial de dados no banco.
	 */
	public void inserirCargaUsuarioInicial() {
		Funcionario funcionarioAdministrador = new Funcionario();
		funcionarioAdministrador.setNome("Administrador");
		funcionarioAdministrador.setLogin("admin");
		funcionarioAdministrador.setSenha("teste");
		BancoDadosSimulado.listaUsuariosCadastrados.add(funcionarioAdministrador);
	}

	public Usuario validarUsuarioInformado(Usuario usuario) throws NegocioException {
		Usuario usuarioLogado = getDelegate().loginUsuario(usuario);
		if (usuarioLogado == null) {
			throw new NegocioException("Login ou senha inválidos");
		}
		if (usuarioLogado.getTipoUsuario().equals("cliente")) {
			return (Cliente) usuarioLogado;
		} else {
			return (Funcionario) usuarioLogado;
		}

	}

}
